<?php
	
	session_start();

	require('setlang.php');
	require('Models/alert.php');
	require('Models/connectBDD.php');
	require('Models/basics.php');
	require('Models/formerrors.php');
	require('Models/adresse.php');
	require('Models/located.php');
	require('Models/ariane.php');
	
	$Ariane = getArianeGenealogy();
	
	$connexion = PDO_BDD_Connect();
	
	if (isset($_POST["valider"]))
	{
		//On vérifie tous les inputs
		$errors = getFormErrors(array("e-mail","civilite","name","surname","login","jour","mois","annee","telephone","mobile","mail","langue","mdp","verifmdp","numero","rue_1","rue_2","rue_3","cp","ville","pays"),"POST");
		//Si l'email existe, on prévient l'utilisateur qu'il ne peut pas s'inscrire avec celle-ci. ($errors[] ne sera pas vide et les actions ne seront pas effectuées)
		if (isset($_POST["mail"]) && alreadyExistsMail($connexion,$_POST["mail"]))
		{
			$existsMail = true;
			$errors[] = "mail";
		}
		//Si on a le téléphone et pas le mobile ou réciproquement, on nettoie les erreurs.
		if (array_search("telephone",$errors) !== false && array_search("mobile",$errors) === false)
		{
			unset($errors[array_search("telephone",$errors)]);
		}
		else if (array_search("mobile",$errors) !== false && array_search("telephone",$errors) === false)
		{
			unset($errors[array_search("mobile",$errors)]);
		}
		//Si les mots de passe sont différents, on prévient l'utilisateur.
		if (isset($_POST["mdp"]) && isset($_POST["verifmdp"]) && $_POST["mdp"] != $_POST["verifmdp"])
		{
			$notEqualsPwd = true;
			$errors[] = "mdpNotEquals";
		}
		//Enfin si le login existe déjà, on prévient à nouveau l'utilisateur
		if (isset($_POST["login"]) && alreadyExistsLogin($connexion,$_POST["login"]))
		{
			$existsLogin = true;
			$errors[] = "loginExists";
		}
		//Si la rue_1 est remplie, on se fiche qu'une autre erreur apparaisse
		if (isset($_POST["rue_1"]))
		{
			if (array_search("rue_2",$errors) !== false)
			{
				unset($errors[array_search("rue_2",$errors)]);
			}
			if (array_search("rue_3",$errors) !== false)
			{
				unset($errors[array_search("rue_3",$errors)]);
			}
		}
		//Si on a aucune erreur
		if (empty($errors))
		{
			//On récupère toutes les variables (on rempli telephone ou mobile par "" si nécessaire)
			$civilite = $_POST["civilite"];
			$nom = $_POST["name"];
			$prenom = $_POST["surname"];
			$date = $_POST["annee"]."-".$_POST["mois"]."-".$_POST["jour"];
			$telephone = (isset($_POST["telephone"]) ? $_POST["telephone"] : "");
			$mobile = (isset($_POST["mobile"]) ? $_POST["mobile"] : "");
			$mail = $_POST["mail"];
			$login = $_POST["login"];
			$mdp = $_POST["mdp"];
			$langue = $_POST["langue"];
			//On s'enregistre en étant non bani
			$valide = 1;
			//On s'enregiste en tant que client et on teste si l'adresse existe déjà
			$categorie = 1;
			$adresse = existsAddress($connexion); //existsAdress retourne 0 ou l'id trouvée
			
			$civiliteMaxLength = 3;
			$nomMaxLength = 255;
			$prenomMaxLength = 255;
			$dateMaxLength = 10;
			$mailMaxLength = 255;
			$loginMaxLength = 255;
			
			//On ajoute l'adresse si on n'en a pas une déjà en BDD
			if ($adresse == 0) {
				
				$adresse = addAddress($connexion);
				
				if ($adresse == -1) {
					die("Une erreur s'est produite lors de l'ajout de l'adresse. Veuillez contactez l'administrateur.");
				}
			
			}		
			//On ajoute donc la personne en BDD
			$request = $connexion->prepare("
				INSERT INTO personne (civilite,nom,prenom,date_naissance,telephone,mobile,mail,valide,login,mdp,ref_langue,ref_categorie,ref_adresse)
				VALUES (:civilite,:nom,:prenom,:date_naissance,:telephone,:mobile,:mail,:valide,:login,:mdp,:ref_langue,:ref_categorie,:ref_adresse);");
			$request->bindParam(':civilite', $civilite, PDO::PARAM_STR, $civiliteMaxLength);
			$request->bindParam(':nom', $nom, PDO::PARAM_STR, $nomMaxLength);
			$request->bindParam(':prenom', $prenom, PDO::PARAM_STR, $prenomMaxLength);
			$request->bindParam(':date_naissance', $date, PDO::PARAM_STR, $dateMaxLength);
			$request->bindValue(':telephone', $telephone, PDO::PARAM_INT);
			$request->bindValue(':mobile', $mobile, PDO::PARAM_INT);
			$request->bindParam(':mail', $mail, PDO::PARAM_STR, $mailMaxLength);
			$request->bindValue(':valide', $valide, PDO::PARAM_INT);
			$request->bindParam(':login', $login, PDO::PARAM_STR, $loginMaxLength);
			$request->bindParam(':mdp', sha1($mdp), PDO::PARAM_STR);
			$request->bindValue(':ref_langue', $langue, PDO::PARAM_INT);
			$request->bindValue(':ref_categorie', $categorie, PDO::PARAM_INT);
			$request->bindValue(':ref_adresse', $adresse, PDO::PARAM_INT);
			$created = $request->execute();
			//On récupère l'id de la personne, puis on l'identifie
			$userId = $connexion->lastInsertId();
			
			$_SESSION['user'] = $login;
			$_SESSION['userid'] = $userId;
			$_SESSION['defaultlanguage'] = getUserLang($connexion,$userId);
			$_SESSION['userRights'] = getUserRights($connexion,$userId);
			$_SESSION['passhash'] = sha1($mdp);
			//Si on s'inscrit en tant que membre ayant une précédente demande
			if (isset($_GET["clientMail"]) && $_GET["clientMail"] == $_POST["mail"] && isset($_GET['ownerId']) && isset($_GET['ownerLocation']))
			{
				//Les contrats seront récupérés pour le propriétaire indiqué et le mail indiqué
				$dates = getWaitingAgreements($connexion,$_POST["mail"],intval($_GET["ownerId"]),intval($_GET["ownerLocation"]));
				if (!empty($dates))
				{
					//Pour chaque date de contrat, on modifie le statut de la location (créations en tout genre)
					//On ajoute ensuite l'alerte à l'utilisateur
					foreach ($dates as $date)
					{
						modifyLocationState($connexion,$_GET["ownerId"],$date["id_location"],$date["begin"],$date["end"],1);
						addAlertToUser($connexion,$userId,$date["id_location"],"loc");
					}
					$addedAgreements = true;
				}
			}
			
			$success = true;
			
		}
		else
		{
			if (in_array("telephone",$errors))
			{
				$phoneError = true;
			}
		}
		
	}
	
	//Controller par défaut;
	require('Views/inscription.php');
	
?>
